package com.cskaoyan.util;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.subject.Subject;

import java.util.Random;
import java.util.UUID;

/**
 * @author: yudefu
 * @date 2021年06月04日  22:10
 * @description: 字符串工具
 */

public class StringUtils {

    public static boolean isEmpty(String content) {
        if (content == null || content.trim().equals("")) {
            return true;
        }
        return false;
    }

    /**TODO 内部修改为 MD5实现
     * 散列密码用
     * 传入明文
     * 返回密文
     * 被切面类com.cskaoyan.aspect.HashPasswordAspect自动调用，不需要主动散列
     * @param originPwd
     * @return
     */

    /**
     * 修改sha250 为  Md5 实现方式
     * @param originPwd
     * @return
     */
    //只散列密码
    public static String sha250(String originPwd) {
        //当前Subject    
           Subject currentUser = SecurityUtils.getSubject();
           //加密（md5+盐），返回一个32位的字符串小写
           String salt="("+originPwd+")";
           String md5Pwd=new Md5Hash(originPwd,salt).toString();
           return md5Pwd;
     }


    /**由于切面类com.cskaoyan.aspect.HashPasswordAspect已经自动转换明文为散列值
     * 按照普通的equals方法判断即可。
     * 此方法有点多余
     *
     * 判断明文（参数1） 和 密文（参数2）是否是同一个密码
     * @param raw
     * @param sha250
     * @return
     */
    @Deprecated
    //判断参数1的散列值是否为参数2
    public static boolean sha250Equals(String raw, String sha250) {
        if (isEmpty(raw) || isEmpty(sha250)) throw new NullPointerException();
        return sha250(raw).equals(sha250);
    }

    /**
     * 文件上传 散列文件名
     * @param originalFilename
     * @return
     */
    public static String hashFileName(String originalFilename) {
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        int i = originalFilename.lastIndexOf(".");
        String substr = originalFilename.substring(i);
        String uuidName = uuid + substr;
        return uuidName;
    }


    /**
     * 判断输入的是否是数字
     */
    public static boolean adminUserParamVerification(String content) {

        if (StringUtils.isEmpty(content)) {
            return true;
        }

        return content.matches("\\d|\\d{2,}");
    }


    /**
     * 判断输入的是否是手机号码
     */
    public static boolean wxFeedbackMobileVerification(String mobile) {

        if (StringUtils.isEmpty(mobile)) {
            return false;
        }

        //校验手机号码：11位数字
        //13[0-9] 14[789] 15[0-9] 16[68] 17[3789] 18[0-9] 199
        return mobile.matches("1(3[0-9]|4[789]|5[0-9]|6[68]|7[3789]|8[0-9]|99)\\d{8}");
    }


    /**
     * 校验反馈类型
     */
    public static boolean wxFeedbackFeedTypeVerification(String feedType) {

        if (StringUtils.isEmpty(feedType)) {
            return false;
        }

        if (feedType.equals("商品相关") || feedType.equals("功能异常") || feedType.equals("优化建议") || feedType.equals("其他")) {
            return true;
        }

        return false;
    }

    /**
     * /admin/auth/login => admin:auto:login
     * 加了shiro有时候 uri会变为/admin/auth/unauth;JESSIONID=XXXXXX
     * 用于在管理员日志记录切面中 转换
     * @param uri
     * @return
     */
    public static String uriToPermission(String uri) {
        if (uri.contains(";")) {
            int i = uri.indexOf(";");
            uri = uri.substring(0, i);
        }
        if (uri.contains("?")) {
            int i = uri.indexOf("?");
            uri = uri.substring(0, i);
        }
        String permission = uri.substring(1).replaceAll("/", ":");
        return permission;
    }

    public static String getVeryCode() {
        Random random = new Random(System.currentTimeMillis());
        int i = random.nextInt();
        i = i < 0 ? -i : i;
        String veryCode = ("" + i).substring(0, 6);
        return veryCode;
    }

    public static Integer parseInt(String num) {
        Integer i = null;
        if (num != null) {
            try {
                i = Integer.parseInt(num);
            } catch (Exception e) {
            }
        }
        return i;
    }
}
